WebsiteAgent should interpolate values from incoming event payload.

Akinori MUSHA 10 years ago
parent
commit
863e2b8c70
2 changed files with 24 additions and 1 deletions
  1. 7 0
      app/models/agents/website_agent.rb
  2. 17 1
      spec/models/agents/website_agent_spec.rb

+ 7 - 0
app/models/agents/website_agent.rb

@@ -237,9 +237,16 @@ module Agents
237 237
 
238 238
     def receive(incoming_events)
239 239
       incoming_events.each do |event|
240
+        Thread.current[:current_event] = event
240 241
         url_to_scrape = event.payload['url']
241 242
         check_url(url_to_scrape) if url_to_scrape =~ /^https?:\/\//i
242 243
       end
244
+    ensure
245
+      Thread.current[:current_event] = nil
246
+    end
247
+
248
+    def interpolated(event = Thread.current[:current_event])
249
+      super
243 250
     end
244 251
 
245 252
     private

+ 17 - 1
spec/models/agents/website_agent_spec.rb

@@ -453,16 +453,32 @@ fire: hot
453 453
     end
454 454
 
455 455
     describe "#receive" do
456
-      it "should scrape from the url element in incoming event payload" do
456
+      before do
457 457
         @event = Event.new
458 458
         @event.agent = agents(:bob_rain_notifier_agent)
459 459
         @event.payload = { 'url' => "http://xkcd.com" }
460
+      end
460 461
 
462
+      it "should scrape from the url element in incoming event payload" do
461 463
         lambda {
462 464
           @checker.options = @valid_options
463 465
           @checker.receive([@event])
464 466
         }.should change { Event.count }.by(1)
465 467
       end
468
+
469
+      it "should interpolate values from incoming event payload" do
470
+        @event.payload['title'] = 'XKCD'
471
+
472
+        lambda {
473
+          @valid_options['extract']['site_title'] = {
474
+            'css' => "#comic img", 'value' => "'{{title}}'"
475
+          }
476
+          @checker.options = @valid_options
477
+          @checker.receive([@event])
478
+        }.should change { Event.count }.by(1)
479
+
480
+        Event.last.payload['site_title'].should == 'XKCD'
481
+      end
466 482
     end
467 483
   end
468 484